package com.linewell.encryption.pojo;

import java.io.Serializable;

/**
 * 加解密初始化对象
 * Company: 南威软件股份有限公司
 *
 * @author wucan
 * @date 2019-03-15
 */
public class SMInitInfo implements Serializable {

    private static final long serialVersionUID = -6706667435924165432L;

    /**
     * appId 厂家类型
     */
    private String appId;
    /**
     * SM2的秘钥索引（凯特密码机使用）
     */
    private Integer sm2KeyIndex;
    /**
     * SM4的KEY索引（凯特密码机使用）
     */
    private Integer sm4KeyIndex;
    /**
     * SM2的公钥（系统自行加解密使用与SM2验证签名使用）
     * Base64
     */
    private String sm2PublicKey;
    /**
     * SM2的私钥（系统自行加解密使用与sm2签名使用）
     * Base64
     */
    private String sm2PrivateKey;
    /**
     * SM4的秘钥（系统自行加解密使用）
     */
    private String sm4Key;
    /**
     * iv偏移量密钥
     */
    private String sm4Iv;
    /**
     * sm2签名地址
     */
    private String sm2SignPath;
    /**
     * sm2签名访问密码
     */
    private String sm2KeyPassword;

    /**
     * SM2 签名验证公钥（签名验证服务器使用-第三方提供）
     */
    private String sm2JceSignPublicKey;

    /**
     * SM2的签名私钥索引（凯特密码机使用）
     */
    private Integer sm2SignPrivateKeyIndex;
    /**
     * SM2的公钥（SM2验证签名使用）
     * Base64
     */
    private String sm2SignPublicKey;
    /**
     * SM2的私钥（sm2签名使用）
     * Base64
     */
    private String sm2SignPrivateKey;

    public SMInitInfo() {
    }

    public SMInitInfo(String appId) {
        this.appId = appId;
    }

    /**
     * SM2密码机加解密使用
     *
     * @param appId       类型 （必填）
     * @param sm2KeyIndex SM2索引（密码机加解密使用）
     */
    public SMInitInfo(String appId, Integer sm2KeyIndex) {
        this.appId = appId;
        this.sm2KeyIndex = sm2KeyIndex;
    }

    /**
     * SM2系统加解密使用
     *
     * @param appId         类型（必填）
     * @param sm2PublicKey  SM2公钥（系统加解密使用）
     * @param sm2PrivateKey SM2私钥（系统加解密使用）
     */
    public SMInitInfo(String appId, String sm2PublicKey, String sm2PrivateKey) {
        this.appId = appId;
        this.sm2PublicKey = sm2PublicKey;
        this.sm2PrivateKey = sm2PrivateKey;
    }

    /**
     * SM4系统与密码机加解密使用
     *
     * @param appId       类型（必填）
     * @param sm4KeyIndex SM4索引（密码机加解密使用）
     * @param sm4Key      SM4秘钥 （系统加解密使用）
     * @param sm4Iv       SM4偏移值（使用偏移时填写）
     */
    public SMInitInfo(String appId, Integer sm4KeyIndex, String sm4Key, String sm4Iv) {
        this.appId = appId;
        this.sm4KeyIndex = sm4KeyIndex;
        this.sm4Key = sm4Key;
        this.sm4Iv = sm4Iv;
    }

    /**
     * SM2签名验签使用
     *
     * @param appId            类型（必填）
     * @param sm2SignPath      签名地址（使用签名服务器使用）（必填）
     * @param sm2KeyIndex      签名索引 （使用签名服务器使用）
     * @param sm2KeyPassword   签名密码 （使用签名服务器使用）
     * @param sm2SignPublicKey 公钥（验证签名使用）
     * @param sm2SignPublicKey 私钥（系统签名使用）
     */
    public SMInitInfo(String appId, String sm2SignPath, Integer sm2KeyIndex, String sm2KeyPassword, String sm2SignPublicKey, String sm2SignPrivateKey) {
        this.appId = appId;
        this.sm2SignPath = sm2SignPath;
        this.sm2KeyIndex = sm2KeyIndex;
        this.sm2KeyPassword = sm2KeyPassword;
        this.sm2SignPublicKey = sm2SignPublicKey;
        this.sm2SignPrivateKey = sm2SignPrivateKey;
    }

    /**
     * SM2签名验签使用（签名验签服务器）
     *
     * @param appId                  类型 （必填）
     * @param sm2SignPrivateKeyIndex SM2私钥索引（签名使用）
     * @param sm2JceSignPublicKey    公钥（验签使用）
     */
    public SMInitInfo(String appId, Integer sm2SignPrivateKeyIndex, String sm2JceSignPublicKey) {
        this.appId = appId;
        this.sm2SignPrivateKeyIndex = sm2SignPrivateKeyIndex;
        this.sm2JceSignPublicKey = sm2JceSignPublicKey;
    }

    public String getAppId() {
        return appId;
    }

    public void setAppId(String appId) {
        this.appId = appId;
    }

    public Integer getSm2KeyIndex() {
        return sm2KeyIndex;
    }

    public void setSm2KeyIndex(Integer sm2KeyIndex) {
        this.sm2KeyIndex = sm2KeyIndex;
    }

    public Integer getSm4KeyIndex() {
        return sm4KeyIndex;
    }

    public void setSm4KeyIndex(Integer sm4KeyIndex) {
        this.sm4KeyIndex = sm4KeyIndex;
    }

    public String getSm2PublicKey() {
        return sm2PublicKey;
    }

    public void setSm2PublicKey(String sm2PublicKey) {
        this.sm2PublicKey = sm2PublicKey;
    }

    public String getSm2PrivateKey() {
        return sm2PrivateKey;
    }

    public void setSm2PrivateKey(String sm2PrivateKey) {
        this.sm2PrivateKey = sm2PrivateKey;
    }

    public String getSm4Key() {
        return sm4Key;
    }

    public void setSm4Key(String sm4Key) {
        this.sm4Key = sm4Key;
    }

    public String getSm4Iv() {
        return sm4Iv;
    }

    public void setSm4Iv(String sm4Iv) {
        this.sm4Iv = sm4Iv;
    }

    public String getSm2SignPath() {
        return sm2SignPath;
    }

    public void setSm2SignPath(String sm2SignPath) {
        this.sm2SignPath = sm2SignPath;
    }

    public String getSm2KeyPassword() {
        return sm2KeyPassword;
    }

    public void setSm2KeyPassword(String sm2KeyPassword) {
        this.sm2KeyPassword = sm2KeyPassword;
    }

    public String getSm2JceSignPublicKey() {
        return sm2JceSignPublicKey;
    }

    public void setSm2JceSignPublicKey(String sm2JceSignPublicKey) {
        this.sm2JceSignPublicKey = sm2JceSignPublicKey;
    }

    public Integer getSm2SignPrivateKeyIndex() {
        return sm2SignPrivateKeyIndex;
    }

    public void setSm2SignPrivateKeyIndex(Integer sm2SignPrivateKeyIndex) {
        this.sm2SignPrivateKeyIndex = sm2SignPrivateKeyIndex;
    }

    public String getSm2SignPublicKey() {
        return sm2SignPublicKey;
    }

    public void setSm2SignPublicKey(String sm2SignPublicKey) {
        this.sm2SignPublicKey = sm2SignPublicKey;
    }

    public String getSm2SignPrivateKey() {
        return sm2SignPrivateKey;
    }

    public void setSm2SignPrivateKey(String sm2SignPrivateKey) {
        this.sm2SignPrivateKey = sm2SignPrivateKey;
    }
}
